package de.vogella.gwt.helloserver.server;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import de.vogella.gwt.helloserver.client.Service;
import de.vogella.gwt.helloserver.client.model.Arbeitsgang;
import de.vogella.gwt.helloserver.client.model.Belegposition;
import de.vogella.gwt.helloserver.client.model.Bestellung;
import de.vogella.gwt.helloserver.client.model.Lagerbestand;
import de.vogella.gwt.helloserver.client.model.Lagerplatz;
import de.vogella.gwt.helloserver.client.model.Geschaeftspartner;
import de.vogella.gwt.helloserver.client.model.Produkt;

public class ServiceImpl extends RemoteServiceServlet implements Service {

	private static final long serialVersionUID = 1L;
	
	public ServiceImpl(){
		
	}
	
	@Override
	public List<Produkt> FindProdukt(Produkt p) {
		return MySQLConnection.getInstance().findProdukt(p);
	}

	@Override
	public Produkt GetProdukt(String ID) {

		return MySQLConnection.getInstance().getProdukt(ID);
	}

	@Override
	public String getLogin(String benutzer) {
		return MySQLConnection.getInstance().getPassword(benutzer);
	}

	public List<String> getAllEinheiten() {
		return MySQLConnection.getInstance().getAllEinheiten();
	}

	public List<String> getAllProduktgruppen() {
		return MySQLConnection.getInstance().getAllProduktgruppen();
	}

	@Override
	public Boolean addProduct(Produkt newProdukt) {

		return MySQLConnection.getInstance().addProduct(newProdukt);

	}

	@Override
	public Boolean editProduct(Produkt editProdukt) {

		return MySQLConnection.getInstance().editProduct(editProdukt);
	}

	@Override
	public void deleteProduct(String id) {
		MySQLConnection.getInstance().deleteProduct(id);

	}

	public List<Geschaeftspartner> findLieferant(Geschaeftspartner l) {
		return MySQLConnection.getInstance().findLieferant(l);
	}

	@Override
	public List<String> getVersandarten() {
		return MySQLConnection.getInstance().getVersandarten();
	}

	@Override
	public List<String> getZahlungsarten() {
		return MySQLConnection.getInstance().getZahlungsarten();
	}

	@Override
	public List<Geschaeftspartner> getLieferanten() {
		return MySQLConnection.getInstance().getLieferanten();
	}

	@Override
	public Produkt getProdukt(String ID) {
		return MySQLConnection.getInstance().getProdukt(ID);
	}

	@Override
	public String getLieferantenID(String unternehmen) {
		return MySQLConnection.getInstance().getLieferantenID(unternehmen);
	}

	@Override
	public void insertBestellkopf(Bestellung kopf) {
		MySQLConnection.getInstance().insertBestellkopf(kopf);
	}

	@Override
	public ArrayList<Lagerplatz> getLagerplaetze() {
		return MySQLConnection.getInstance().getLagerplaetze();
	}

	@Override
	public ArrayList<Produkt> getProdukte() {
		return MySQLConnection.getInstance().getProdukte();
	}

	@Override
	public ArrayList<Lagerbestand> getLagerbestand() {
		return MySQLConnection.getInstance().getLagerbestand();
	}

	// @Override
	// public ArrayList<Lagerplatz> getFilledLagerplaetze() {
	// return null;
	// }

	public ArrayList<Lagerplatz> getFilledLagerplaetzePerformance() {
		return MySQLConnection.getInstance().getFilledLagerplaetzePerformance();
	}

	@Override
	public ArrayList<String> getBelegarten() {
		return MySQLConnection.getInstance().getBelegarten();
	}

	@Override
	public ArrayList<Bestellung> getNichtGeliefert() {

		return MySQLConnection.getInstance().getNichtGeliefert();
	}

	@Override
	public Lagerbestand insertLagerbestand(Lagerbestand bestand) {

		return MySQLConnection.getInstance().insertLagerbestand(bestand);
	}

	@Override
	public Boolean insertGeschaeftspartner(Geschaeftspartner neu) {
		return MySQLConnection.getInstance().insertGeschaeftspartner(neu);
	}

	@Override
	public Bestellung getBestellkopf(String id) {
		return MySQLConnection.getInstance().getBestellkopf(id);
	}

	@Override
	public ArrayList<Belegposition> getBelegpositionen(String bestellkopfID) {
		return MySQLConnection.getInstance().getBelegpositionen(bestellkopfID);
	}

	@Override
	public Boolean insertBelegposition(Belegposition neu) {
		return MySQLConnection.getInstance().insertBelegposition(neu);
	}

	@Override
	public ArrayList<Arbeitsgang> getArbeitsgang(String produktID) {		
		return MySQLConnection.getInstance().getArbeitsgang(produktID);
	}
	
	public ArrayList<String> getBauplan(String produktID){
		ArrayList<String> temp = new ArrayList<String>();
		temp.add(produktID);
		getBauplanTest(temp);
		return 	temp;		
	}
	
	public static void getBauplanTest(ArrayList<String> ganzeListe) {
		int ganz = ganzeListe.size();
		for (int i = 0 ; i < ganz ; i++) {
			ArrayList<String> teilListe = MySQLConnection.getInstance().getBauplan(ganzeListe.get(i));
			if(teilListe.size() > 0){				
				getBauplanTest(teilListe);
				ganzeListe.addAll(teilListe);
			}
		}
	}
}
